class Events {
    constructor() {
        // 存储事件名称, 和事件处理函数的对应关系
        /*
            {
                event1:[event1Handler1,event1Handler2],
                event2:[event2Handler1]
            }
        */
        this.subs = {

        }
    }

    // 触发自定义事件: 根据事件名称, 找到对应的事件处理函数, 一次执行
    // eventName: 事件名称
    // params: 事件参数( 传递给事件处理函数的参数 )
    $emit(eventName, params) {  
        // 说明当前事件监听过
        if(this.subs[eventName]){
            // 找出所有的事件处理函数, 依次执行
            this.subs[eventName].forEach(callback=>{
                callback&&callback(params)
            })

        }
    }

    // 监听自定义事件: 收集事件名称和事件处理函数之间的对应关系
    // eventName: 事件名称
    // handler: 事件处理函数
    $on(eventName, handler) {
        // 当前事件之前监听过
        if (this.subs[eventName]) {
            this.subs[eventName].push(handler);
        }else{
            // 当前事件是第一次件监听
            this.subs[eventName]=[handler];
        }
    }
}

// 创建Events 实例对象
export default new Events();